package com.wcj.test;

import java.util.*;

/**
 * 给定一个字符串 s ，根据字符出现的 频率 对其进行 降序排序 。
 * 一个字符出现的 频率 是它出现在字符串中的次数。
 *
 * 返回 已排序的字符串 。如果有多个答案，返回其中任何一个。
 */
public class 根据字符出现频率排序 {
    public String frequencySort(String s) {
        Map<Character,Integer> map = new TreeMap<>();
        for (int i = 0; i < s.length(); i++){
            Character c = s.charAt(i);
            if (map.keySet().contains(c)){
                Integer integer = map.get(c);
                integer++;
                map.put(c,integer);
            }else {
                map.put(c,1);
            }
        }
        List<Character> list = new ArrayList<Character>(map.keySet());
        Collections.sort(list, (a, b) -> map.get(b) - map.get(a));
        StringBuffer sb = new StringBuffer();
        int size = list.size();
        for (int i = 0; i < size; i++) {
            char c = list.get(i);
            int frequency = map.get(c);
            for (int j = 0; j < frequency; j++) {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
